package com.leetcode.study;

/**
 * https://leetcode.cn/problems/add-two-numbers/description/
 * 两数相加
 */
public class L2 {
    public static void main(String[] args) {
        /*ListNode l7 = new ListNode(9);
        ListNode l6 = new ListNode(9,l7);
        ListNode l5 = new ListNode(9,l6);*/
        //ListNode l4 = new ListNode(9);
        ListNode l3 = new ListNode(9);
        ListNode l2 = new ListNode(4,l3);
        ListNode l1 = new ListNode(2,l2);

        ListNode n4 = new ListNode(9);
        ListNode n3 = new ListNode(4,n4);
        ListNode n2 = new ListNode(6,n3);
        ListNode n1 = new ListNode(5,n2);

        ListNode listNode = addTwoNumbers(l1,n1);

        while (null != listNode) {
            System.out.println(listNode.val);
            listNode = listNode.next;
        }
    }

    public static ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode pre = new ListNode(0);
        ListNode cur = pre;

        int v = 0;

        while (l1 != null || l2 != null) {

            int a,b;

            a = null != l1 ? l1.val : 0;
            b = null != l2 ? l2.val : 0;

            int c = a + b + v;
            //v = c >= 10 ? 1 : 0;
            v = c / 10;


            ListNode listNode = new ListNode(c % 10);

            cur.next = listNode;
            cur = listNode;

            if(l1 != null) {
                l1 = l1.next;
            }
            if(l2 != null) {
                l2 = l2.next;
            }
        }

        if (v == 1) {
            cur.next = new ListNode(v);
        }

        return pre.next;
    }


    /**
     * Definition for singly-linked list.
     */
    public static class ListNode {
        int val;
        ListNode next;
        ListNode() {}
        ListNode(int val) { this.val = val; }
        ListNode(int val, ListNode next) { this.val = val; this.next = next; }
    }

}
